2e6c07f07450408373a7e2436d1d8de6c7fb80a5,Script_1/src/Parser/ASTs/ExprAccs_Arr.java,ExprAccs_Arr,checkType,#CodeGenerator#,42
Before Change
t2.setDims(d2);
t2.setEleType(((T_Array)t1).getEleType());
t2.genTypeSig(codegen);
if(!codegen.getTypeInSymTb(this.ref_type).canAsnFrom(codegen,t2))
return false;
return true;
}
After Change
codegen.putTypeInSymTb(this.rst_type, t);
return true;
}
public boolean checkType(CodeGenerator codegen)throws TypeCheckException{
if(!this.pre_fld.checkType(codegen))
return false;
if(!this.dim_lst.checkType(codegen))
return false;
T_Type t1=codegen.getTypeInSymTb(this.pre_fld.rst_type);
if(t1.getKType()!=T_Type.KType.t_arr)
return false;
int d1=((T_Array)t1).getDims();//pre_field's dimension
if(d1<this.dim_lst.dim_n)
return false;
int d2=d1-this.dim_lst.dims.size();//rst_val's dimension
if(d2==0){
this.rst_type=((T_Array)t1).getEleType();
if(this.ref_type==null)return true;
if(codegen.getTypeInSymTb(this.ref_type).canAsnFrom(codegen,codegen.getTypeInSymTb(this.rst_type)))
return true;
else
throw new TypeCheckException("type error: array exp "+this.pre_fld.rst_val);
}else{
String elet=((T_Array)t1).getEleType()+"["+d2+"]";
this.rst_type=elet;
if(this.ref_type==null)return true;
T_Type t2=codegen.getTypeInSymTb(this.ref_type);
if(t2.getKType()==T_Type.KType.t_arr&&((T_Array)t2).getEleType().equals(elet)&&((T_Array)t2).getDims()==d2){
return true;
}else